Używanie i automatyzacja kodów kreskowych za pomocą VBA w Excel
VisualBasic for Applications (VBA) może być używany do rozwiązywania wielu problemów w Excelu. Tutaj pokażemy, jak osadzać, używać i usuwać kontrolkę ActiveBarcode za pomocą VBA:
Osadzanie kontrolki ActiveBarcode w arkuszu:
W tym przykładzie kontrolka kodu kreskowego zostanie umieszczona bezpośrednio nad komórką. Wygląda to tak, jakby kod kreskowy znajdował się wewnątrz komórki.
Najpierw odczytujemy rozmiar komórek:
CurrentCell = "C3" MyHeight = Range(CurrentCell).Height MyWidth = Range(CurrentCell).Width MyTop = Range(CurrentCell).Top MyLeft = Range(CurrentCell).LeftNależy pamiętać, że komórka powinna mieć minimalny rozmiar, aby kod kreskowy mógł się w niej zmieścić. Jeśli komórka jest zbyt mała, zostanie wyświetlony Błąd rozmiaru. Zmieniamy więc wysokość komórki na 30 pikseli:
' Enlarge the cell height to 30 pixels Range(CurrentCell).RowHeight = 30Poniższa funkcja utworzy kontrolkę kodu kreskowego bezpośrednio nad komórką:
ActiveSheet.OLEObjects.Add(ClassType:="ACTIVEBARCODE.BarcodeCtrl.1", Link:=False, _ DisplayAsIcon:=False, Width:=MyWidth , Height:=MyHeight, Top:=MyTop + 2,_ Left:=MyLeft + 4).SelectMożna bezpośrednio połączyć obiekt kodu kreskowego z komórką:
ActiveSheet.OLEObjects(MyBarcode).LinkedCell = "B7"Aby uzyskać łatwy dostęp do kontrolki, przechowujemy jej nazwę w zmiennej MyBarcode:
MyBarcode = ActiveSheet.Shapes(ActiveSheet.Shapes.Count).NameTeraz możesz używać właściwości i metod obiektu kodu kreskowego, jak chcesz:
' set properties ActiveSheet.OLEObjects(MyBarcode).Object.Font.Size = 8 ActiveSheet.OLEObjects(MyBarcode).Object.Type = 14 ' Code 128 ActiveSheet.OLEObjects(MyBarcode).Object.Text = Range("C3")Jeśli kontrolka nie jest już potrzebna, można ją usunąć z arkusza:
ActiveSheet.OLEObjects(MyBarcode).DeleteWskazówka: Jeśli konieczne jest, aby system Windows przetwarzał nadchodzące zdarzenia (często nazywane "KeepWindowsAlive") w makrze, można to wymusić za pomocą następującej funkcji VBA:
DoEventsMoże to być konieczne, np. jeśli kontrolka musi narysować się jako nowa.