Прежде всего, спасибо за хорошее качество информации, которую вы делитесь. Я ценю все вопросы и ответы, которые я нашел очень полезными. Теперь у меня проблема с программированием vba в excel.
У меня длинный список разных документов и названий/кодов документов в excel, из которых я хотел бы сделать выбор с помощью флажков, какие документы будут напечатаны. Документы уже находятся в одном текстовом файле, который можно использовать в качестве исходного файла. Поэтому флажки, коды документов и источники должны быть связаны друг с другом. Я создал две команды рядом со списком, где один предназначен для печати и создания комбинированного отчета, а другой – для сброса (снятие отметки со всех флажков).
Надеюсь, я разъяснил, что я ищу, и если можно получить советы, как идти вперед.
Пока мне удалось запрограммировать кнопку сброса, но для того, чтобы создать функцию печати, мне показалось, что это действительно сложно и неясно.
РЕДАКТИРОВАТЬ:
До сих пор я пытался создать макрос, который собирает все флажки из списка на другой лист (PRINT), и я начал его со следующего незавершенного кода:
Private Sub CommandButton1_Click()
Dim cb As CheckBox
Dim rng As Range
Dim row As Range
Set rng = Range(A7, b153)
For Each row In rng.Rows
If cb = True Then Run (sbcopyrangetoanothersheet)
Else: Next row
End Sub
Sub sbcopyrangetoanothersheet()
Sheets(Documents).Range(A7,b153).Copy Destination:=Sheets(PRINT).Range(A7,B153)
Range(A7, b153).Copy
Range(A7, b153).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End Sub
Сброс макроса:
Sub Reset()
Dim sh As Worksheet
For Each sh In Sheets
On Error Resume Next
sh.CheckBoxes.Value = False
On Error GoTo 0
Next sh
End Sub
Вы можете зацикливаться на этом и распечатать, открыв worddoc и распечатав его через winWord. Есть варианты по этому поводу, поэтому ознакомьтесь с документацией по MSDN, но это должно указывать вам направление.
Я не рекомендую использовать VBA для этого больше, а скорее использую winform и.net(vb или С#) и openXML для печати.
Anywho. вот код, его разорвал из моего разума, чтобы он не совсем компилировался.
For Each control In ActiveSheet.OLEObjects
If control.Name Like "CheckBox*" Then
if control.Object.Value == true then PrintWinWord ("somehow infer word doc Path from eitherName of checkbox or id")
End If
Next control
Sub PrintWinWord(dim wordDocPath as string)
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Open(wordDocPath )
objDoc.PrintOut
objDoc.Close
objWord.Quit
End Sub