Temat: Makra i Visual Basic
Makro można uprościć:
przede wszystkim sądzę, że nie jest Ci potrzebne, aby makro otwierało arkusz - wygodniej jest otworzyć go samemu, i dopiero po otwarciu uruchamiać (najwygodniej przyciskiem, do którego przypiszesz to makro).
nie jest potrzebne aktywowanie komórki A10, więc wiersz
"Range("A10").Activate" możesz skasować. Makro ma działać w określonym obszarze, który znacznie wygodniej byłoby określić konkretnie, podając adresy górnej lewej i dolnej prawej komórki zakresu z danymi, np. Range("B2:L10"). To się przyda później przy mnożeniu przez 1, bo chyba makro ma mnożyć te przekonwertowane liczby?
Można by było także skrócić zamianę znaków, ale dla pokazania, jak pracuje VB niech zostanie tak, jak jest - makro sprawdza każdą komórkę w zadanym obszarze, i dokonuje najpierw zamiany kropek na przecinki, a potem likwiduje, znowu sprawdzając każdą komórkę w obszarze, pojedyncze znaki cudzysłowu.
Zdefiniowanie zmiennej
komorka (Dim komorka As Range) lepiej przenieść na początek makra, do pierwszej linijki po nazwie makra.
Jeśli zdefiniujesz ten zakres z danymi, to cały ciąg:
Set mojzakres = Range("b2") 'w pierwszych kolumnach i linijkach mam opisy
mojzakres.Select
Set mojzakres = mojzakres.CurrentRegion
mojzakres.Offset(1, 1).Resize(mojzakres.Rows.Count - 1, mojzakres.Columns.Count - 1).Select
staje się niepotrzebny.
makro może wtedy wyglądać tak:
Sub obrobka()
Dim komorka as Range
On Error GoTo blad
--Range("lewa górna komórka:prawa dolna komórka").Select
--Selection.Replace What:=".", Replacement:=","
--Selection.Replace What:="""", Replacement:=""
--Range("lewa górna komórka").Activate
-----------For Each komorka In Selection
-----------------If komorka.Value=0 then
----------------------Goto ignoruj
-----------------Else
----------------------komorka.Value = komorka.Value * 1
-----------------End If
ignoruj:
-----------Next komorka
--MsgBox "Skończone", vbInformation, "Twoje makro"
--Exit Sub
blad:
--MsgBox "Błąd, koniec makro.", vbCritical, "Twoje makro"
End Sub
-------------
Nie sprawdzam, ale wydaje mi się, że powinno działać.
[edit
GL nie umożliwia wprowadzenia przydatnych spacji w poszczególnych wierszach, więc zastąpię je znakami "-", których nie przeniesiesz przy przepisywaniu (kopiowaniu) tego makra
Janusz K. edytował(a) ten post dnia 28.07.09 o godzinie 12:11