VB6 utskrift via excel og velge en av to skrivere

stemmer
3

Jeg søkte mye for en løsning på problemet mitt, men jeg frykter det er den sittende foran meg, og jeg kan ikke se det.

Problem: Jeg har en VB6 program som kaller excel og bruker en Excel-fil som en database til å trekke adresser fra og andre ark til å sette adressen inn for adresseetiketter Jeg trenger trykt. Dette sterkt redusert skrivefeil i adressen og tillatt meg å speedup prosessen ved å automatisere opprettelsen av pallen X AV X. Så alt dette fungerer bra så lenge som standardskriver er skriveren som pallen etiketten må skrives på. Jeg ønsker å innlemme en andre stil etikett inn i dette programmet, og jeg har nå gjort dette. programmet vil ringe opp og fyll inn all nødvendig informasjon og avhengig av det valgte alternativet vil skrive ut med en av de to excel maler.

Problemet jeg har er at jeg ikke kan for livet av meg få det til å skrive ut store etiketten til en skriver samtidig som du har det skrive ut den andre etiketten til den lille etikettskriver. Jeg har nå opprettet et frittstående program som jeg kan på vil skrive ut til det skriver jeg vil, men jeg kan ikke få min etikett app til å gjøre dette. Jeg har en følelse det noe å gjøre med excel.application innstillinger eller noe. skriver navnene som de frittstående program bruker er oppført i programmet på det jeg trodde var riktig sted (command3 knappen)

Option Explicit
Dim SelectAll As Integer
Dim location As String
Dim location2 As String
Dim loadedlist As Integer
Dim big_small As String
Dim prt As Printer

'trying to preload excel

       Dim excel_app As Excel.Application
       Dim workbook As Excel.workbook
       Dim sheet As Excel.Worksheet
       Dim ws As Excel.Worksheet

Private Sub cmdframeclose_Click()
    SelectAll = List9.ListIndex
    List1.ListIndex = SelectAll
    List2.ListIndex = SelectAll
    List3.ListIndex = SelectAll
    List4.ListIndex = SelectAll
    List5.ListIndex = SelectAll

     'set text box with text
    Text1.Text = List9.Text
    Text2.Text = List1.Text
    Text3.Text = List2.Text & ,  & List3.Text &   & List4.Text
    Text4.Text = List5.Text

    'auto hide frame after selection
    Frame1.Visible = False
End Sub

Private Sub CMDPRINT_Click()

    'check for empty boxes
    If Text1.Text =  Then
        MsgBox please enter a customer name
        Text1.SetFocus
        Exit Sub
    End If

    If Text2.Text =  Then
        MsgBox please enter a street address
        Text2.SetFocus
        Exit Sub
    End If

    If Text3.Text =  Then
        MsgBox please enter a city, state and zip
        Text3.SetFocus
        Exit Sub
    End If

    If Text4.Text =  Then
        MsgBox please enter customer contact info
        Text4.SetFocus
        Exit Sub
    End If

    If Text5.Text =  Then
        MsgBox please enter msu number
        Text5.SetFocus
        Exit Sub
    End If

    If Text6.Text =  Then
        MsgBox please enter number of pallets
        Text6.SetFocus
        Exit Sub
    End If


If Option1.Value = True Then

    'check path for blank sheet to work with
    big_small = G15
    If Text8.Text <>  Then
    location2 = Text8.Text & \ & Pallet_Sheet.xlsx
    Else
    MsgBox Please Input a valid data path
    Text7.SetFocus
    Exit Sub
    End If
    'set the printer to the correct one for the document, ***doesnt work***
    'Set Printer = Printers(\\ms-nauss-app1\MS-NAUSSA-PRN06)
Else
    'check path for blank sheet to work with
    big_small = B8
    If Text8.Text <>  Then
    location2 = Text11.Text & \ & Small_Pallet_Label.xlsx
    Else
    MsgBox Please Input a valid data path
    Text7.SetFocus
    Exit Sub
    End If
    'set the printer to the correct one for the document, doesnt work
    'Set Printer = Printers(ZDesigner GK420d)


End If

    'OPEN EXCEL

    ' Get the Excel application object.
    Set excel_app = New Excel.Application

    ' Make Excel visible (optional).
    excel_app.Visible = False

    ' Open the workbook read-only.
    Set workbook = excel_app.Workbooks.Open(location2, ReadOnly:=True)

    ' Get the first worksheet.
    Set ws = workbook.Sheets(1)

If Option1.Value = True Then

    'Fill in the cells with data large label
    ws.range(C3).Value = Text1.Text
    ws.range(C4).Value = Text2.Text
    ws.range(C5).Value = Text3.Text
    ws.range(C6).Value = Text4.Text
    ws.range(E11).Value = Text5.Text
    ws.range(I15).Value = Text6.Text
    Else
    'fill in the cells with data small label
    ws.range(B3).Value = Text1.Text
    ws.range(B4).Value = Text2.Text
    ws.range(B5).Value = Text3.Text
    ws.range(B6).Value = Text4.Text
    ws.range(B7).Value = Text5.Text
    ws.range(D8).Value = Text6.Text
    End If


    'create pallet numnbering x of x
Dim p As Integer
    Application.ScreenUpdating = False
    ws.range(big_small).Value = 1

    'create and increment the pallet labels
    For p = 0 To (Text6.Text - 1)
    ws.Copy Before:=ws
    ws.range(big_small).Value = (p + 1)

    Next p

'create pallet excel document sheets x of x

  'Dim ws As Worksheet
  Dim i As Integer
  i = 0

  For Each ws In workbook.Worksheets
    If (i = 0) Then
        ws.Select
    Else
        ws.Select False

    End If

  i = i + 1
ws.PrintOut

  Next ws

'delete and clear screen for next shipping address

    '    Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        ''For Each ws In Worksheets
        For Each ws In workbook.Worksheets
        If ws.Name <> Sheet1 Then ws.Delete
        Next


        Set ws = workbook.Sheets(1)
        Text1.Text = 
        Text2.Text = 
        Text3.Text = 
        Text4.Text = 
        Text5.Text = 
        Text6.Text = 
     '   Application.ScreenUpdating = False

      workbook.Close SaveChanges:=False

            ' Close the Excel server.
            excel_app.Quit 
End Sub

Private Sub Command1_Click()


    If Text7.Text <>  Then
    location = Text7.Text & \ & addresses.xlsx
    Else
    MsgBox Please Input a valid data path
    Text7.SetFocus
    Exit Sub
    End If


Frame1.Visible = True
            List9.SetFocus
cmdframeclose.Default = True
    If loadedlist = 0 Then
        loadedlist = 1

            ' Get the Excel application object.
            Set excel_app = New Excel.Application

            ' Make Excel visible (optional).
          '  excel_app.Visible = False

            ' Open the workbook read-only.
            Set workbook = excel_app.Workbooks.Open(location, ReadOnly:=True)

            ' Get the first worksheet.
            Set sheet = workbook.Sheets(1)

            ' Get the titles and values.
            SetTitleAndListValues sheet, 1, 1, List9
            SetTitleAndListValues sheet, 1, 2, List1
            SetTitleAndListValues sheet, 1, 3, List2
            SetTitleAndListValues sheet, 1, 4, List3
            SetTitleAndListValues sheet, 1, 5, List4
            SetTitleAndListValues sheet, 1, 6, List5

            ' Save the changes and close the workbook.
            workbook.Close SaveChanges:=False

            ' Close the Excel server.
            excel_app.Quit
            Else
            Exit Sub
            End If
            List9.SetFocus
End Sub

' Set a title Label and the values in a ListBox. Get the title from cell (row, col).
' Get the values from cell (row + 1, col) to the end of the column.
Private Sub SetTitleAndListValues(ByVal sheet As Excel.Worksheet, _
    ByVal row As Integer, ByVal col As Integer, ByVal lst As ListBox)
Dim range As Excel.range
Dim last_cell As Excel.range
Dim first_cell As Excel.range
Dim value_range As Excel.range
Dim range_values() As Variant
Dim num_items As Integer
Dim i As Integer

    ' Get the values.
    ' Find the last cell in the column.
    Set range = sheet.Columns(col)
    Set last_cell = range.End(xlDown)

    ' Get a Range holding the values.
    Set first_cell = sheet.Cells(row + 1, col)
    Set value_range = sheet.range(first_cell, last_cell)

    ' Get the values.
    range_values = value_range.Value

    ' Convert this into a 1-dimensional array.
    ' Note that the Range's array has lower bounds 1.
    num_items = UBound(range_values, 1)
    For i = 1 To num_items
        lst.AddItem range_values(i, 1)
    Next i
End Sub

Private Sub Command3_Click()
    Text1.Text = 
    Text2.Text = 
    Text3.Text = 
    Text4.Text = 
    Text5.Text = 
    Text6.Text = 
    Text1.SetFocus      

End Sub

Private Sub Command4_Click()
            ' Close the Excel server.
            excel_app.Quit
End
End Sub

Private Sub Form_Load()
Frame1.Visible = False
Dim file_name As String

    file_name = Application.StartupPath

End Sub   

Private Sub List9_dblClick()        
    SelectAll = List9.ListIndex
    List1.ListIndex = SelectAll
    List2.ListIndex = SelectAll
    List3.ListIndex = SelectAll
    List4.ListIndex = SelectAll
    List5.ListIndex = SelectAll

     'set text box with text
    Text1.Text = List9.Text
    Text2.Text = List1.Text
    Text3.Text = List2.Text & ,  & List3.Text &   & List4.Text
    Text4.Text = List5.Text

    'auto hide frame after selection
    Frame1.Visible = False
    CMDPRINT.Default = True

End Sub


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

 If KeyCode = 27 Then
    Frame1.Visible = False
    End If

If KeyCode = 38 Then
    If List9.ListIndex > -1 Then
        List9.ListIndex = List9.ListIndex - 1

           'update listboxes
           SelectAll = List9.ListIndex
           List1.ListIndex = SelectAll
           List2.ListIndex = SelectAll
           List3.ListIndex = SelectAll
           List4.ListIndex = SelectAll
           List5.ListIndex = SelectAll

           'set text box with text
           Text1.Text = List9.Text
           Text2.Text = List1.Text
           Text3.Text = List2.Text & ,  & List3.Text &   & List4.Text
           Text4.Text = List5.Text

    End If
ElseIf KeyCode = 40 Then
    If List9.ListIndex < List9.ListCount - 1 Then
        List9.ListIndex = List9.ListIndex + 1

           'update listboxes
           SelectAll = List9.ListIndex
           List1.ListIndex = SelectAll
           List2.ListIndex = SelectAll
           List3.ListIndex = SelectAll
           List4.ListIndex = SelectAll
           List5.ListIndex = SelectAll

           'set text box with text
           Text1.Text = List9.Text
           Text2.Text = List1.Text
           Text3.Text = List2.Text & ,  & List3.Text &   & List4.Text
           Text4.Text = List5.Text
    End If
ElseIf KeyCode = 13 Then
           'update listboxes
           SelectAll = List9.ListIndex
           List1.ListIndex = SelectAll
           List2.ListIndex = SelectAll
           List3.ListIndex = SelectAll
           List4.ListIndex = SelectAll
           List5.ListIndex = SelectAll

           'set text box with text
           Text1.Text = List9.Text
           Text2.Text = List1.Text
           Text3.Text = List2.Text & ,  & List3.Text &   & List4.Text
           Text4.Text = List5.Text
           Frame1.Visible = False
    End If

End Sub

Arrangementer:

  1. laste hovedskjermen med brukertekstbokser og knapper
  2. Load kunde laster en kombinasjonsboks med alle adressene og lar meg velge en fullstendig adresse basert utenfor kundens navn. ved å dobbeltklikke kombinasjonsboksen valget du ønsker
  3. alle av adressen lastes inn i tekstboksene på hovedskjermen, som kan bli verifisert og / eller justeres etter behov.
  4. legge inn bestillingsnummer og antall paller på forsendelsen.
  5. Klikk på Skriv ut (dette er der jeg ønsker endringen. Jeg trenger det for å skrive ut til riktig skriver basert off de to ekstra mulighet knapper.) hvis det ikke er noen data mangler programmet vil be deg og også sette fokus på tekstboksen som er manglende data.
  6. data blir tilsatt til den utmerker malen, det riktige antall etiketter blir opprettet (pall x av x), og de er ferdige.
  7. skjema sletter seg selv, og er nå klar til bruk igjen.

Alle hjelp vil bli verdsatt.

Takk skal du ha

....................................REDIGERE............. ................................................

Etter en god natts søvn jeg innså noe. Hvis jeg ringer excel programmet gjennom VB6, deretter endre skriver i VB6 kan ikke påvirke skriveren i excel. Jeg vet om de ekstra funksjonene i arbeidsbok objekt. Jeg prøvde å sette skriveren, men holdt får den samme feilmeldingen.

ws.printout (activeprinter: = ZDesigner GK420d)

som jeg er ferdig med å skrive kodelinje jeg får feilmeldingen error forventet: = Så vidt jeg vet jeg har gjort det linje med kode riktig. Det er svært mange flere funksjoner som kan gjøres med det også. i det siste har jeg brukt denne til å skrive ut flere kopier av ting og en gang selv sette duplex .... alt på standardskriver skjønt.

Takk igjen for din tid.

Publisert på 18/12/2014 klokken 02:23
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Prøv det uten parentes, som i:

ws.printout activeprinter:="ZDesigner GK420d"

Den PrintOutmetoden ikke returnerer en verdi, slik at du ikke kan bruke parenteser som du ville gjort med en funksjon (som returnerer en verdi), i hvert fall på denne måten.

Svarte 18/12/2014 kl. 13:54
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more