| |
|
|
- Page 1 - |
|
Stephan Sonneborn | Hallo zusammen, in einem Excel-Tabellenblatt (Stückliste) sollen Artikel eigetragen werden. Das erfolgt zum einem zu Fuß, zum anderen durch ein Auswahlprogramm mit bereitgestellten Artikeln. Die Excel Vorlage hat einen primitiven Schutz gegen unbeabsichtigtes Überschreiben falscher Zellen: Blattschutz ohne Password.
Für das händische Bearbeiten der Stückliste habe ich ein Makro geschrieben, dass den Blattschutz aufhebt, eine Leerzeile einfügt und dann den Blattschutz wieder setzt. In VBA è das dann: ActiveSheet.Unprotect
Beim Übertragen der Artikeldaten in das Excelblatt per oxc muss der Blattschutz auch aufgehoben sein. Das wollte ich so bewerkstelligen:
'*-------------------------------------------------------------------------------------------------*
'* Exceldatei öffnen *
'*-------------------------------------------------------------------------------------------------*
PROC OpenExcelFile
'*-------------------------------------------------------------------------------------------------*
PARAMETERS File$
'*-------------------------------------------------------------------------------------------------*
DECLARE UsedRange&, Rows&
'*-------------------------------------------------------------------------------------------------*
IF FILEEXISTS(File$)
'Excel unsichtbar starten:
Excel& = ocxCREATE("Excel.Application")
Workbooks& = ocxGet(Excel&,"Workbooks")
ExcelWnd& = ocxGet(Excel&,"Hwnd")
ocxPut(Excel&,"DisplayAlerts",1)
ocxPut(Excel&,"Visible" ,1)
'*-------------------------------------------------------------------------------------------------*
'Excel-Andare:
ExcelBook& = ocxMethod(Workbooks&,"Open" , File$)
ExcelSheet& = ocxGet(ExcelBook&, "Sheets", ExcelSheet$)
ocxPut(ExcelSheet&, "Unprotect")
Range& = ocxGet(ExcelSheet&, "Range", "A1")
UsedRange& = ocxGet(ExcelSheet&, "UsedRange")
Rows& = ocxGet(UsedRange&, "Rows")
ExcelSheetLines& = ocxGet(Rows&, "Count")
LastBOMPos& = INT((ExcelSheetLines& - 19)/4)
ELSE
ExcelWnd& = 0
ENDIF
'*-------------------------------------------------------------------------------------------------*
'Rückgabewert:
RETURN ExcelWnd&
'*-------------------------------------------------------------------------------------------------*
ENDPROC
'*-------------------------------------------------------------------------------------------------*
Leider führt das zum Programmabsturz. Hat jemand eine Idee? Es geht nur um den Eintrag ocxPUT(ExcelSheet&, "Unprotect"). Ohne diese Zeile corre der Code. |
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 06.02.2011 ▲ |
|
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
Stephan Sonneborn | Hat ihn!
Einfach statt ocxPut ocxMethod nehmen:
'*-------------------------------------------------------------------------------------------------*
'* Exceldatei öffnen *
'*-------------------------------------------------------------------------------------------------*
PROC OpenExcelFile
'*-------------------------------------------------------------------------------------------------*
PARAMETERS File$
'*-------------------------------------------------------------------------------------------------*
DECLARE UsedRange&, Rows&
'*-------------------------------------------------------------------------------------------------*
IF FILEEXISTS(File$)
'Excel unsichtbar starten:
Excel& = ocxCREATE("Excel.Application")
Workbooks& = ocxGet(Excel&,"Workbooks")
ExcelWnd& = ocxGet(Excel&,"Hwnd")
ocxPut(Excel&,"DisplayAlerts",1)
ocxPut(Excel&,"Visible" ,1)
'*-------------------------------------------------------------------------------------------------*
'Excel-Andare:
ExcelBook& = ocxMethod(Workbooks&,"Open" , File$)
ExcelSheet& = ocxGet(ExcelBook&, "Sheets", ExcelSheet$)
ocxMethod(ExcelSheet&, "Unprotect")
Range& = ocxGet(ExcelSheet&, "Range", "A1")
UsedRange& = ocxGet(ExcelSheet&, "UsedRange")
Rows& = ocxGet(UsedRange&, "Rows")
ExcelSheetLines& = ocxGet(Rows&, "Count")
LastBOMPos& = INT((ExcelSheetLines& - 19)/4)
ELSE
ExcelWnd& = 0
ENDIF
'*-------------------------------------------------------------------------------------------------*
'Rückgabewert:
RETURN ExcelWnd&
'*-------------------------------------------------------------------------------------------------*
ENDPROC
'*-------------------------------------------------------------------------------------------------*
|
|
|
| Schöne Grüße aus Wittgenstein von Stephan
Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz | 06.02.2011 ▲ |
|
|
|
|
|
| Sehr cool, habe soeben einen Ableger bei Codesnippets erstellt: [...] |
|
|
| |
|
|