Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Weergeven resultaten 1 tot 14 van 14

Onderwerp: Exelmacro openen vanuit Access

  1. #1
    Senior Member
    Geregistreerd
    4 februari 2014
    Vraag is opgelost

    Exelmacro openen vanuit Access

    Ik tracht een werkbook te openen vanuit Access maar krijg de volgende foutmelding (nr 1004): "Het bestand 2590056.xlsx kan niet worden geopend omdat de bestandsindeling of de bestandsextensie niet geldig is". Heb dit gecontroleerd en is een excelbestand met de juiste extentie (xlsx). Hierbij de code
    Code:
                  Dim XL As Object
                            Dim OpenWerkboek As Object
                            
                            Set XL = CreateObject("Excel.Application")
                            txtOpenWerkboekPad = "C:\IGEANToets_FE\TeVersturenExcels\" & txtStamboeknummerVersturen & ".xlsx"
                            
                            With XL
                                .Visible = False
                                .DisplayAlerts = False
                                .Workbooks.Open (txtOpenWerkboekPad)
                                
                                With .OpenWerkboek
                                    .Range("A2").Select
        '                            .Range("A2", Selection.End(xlDown)).Select
                                
                                End With
                                OpenWerkboek.SaveAs "C:\IGEANToets_FE\TeVersturenExcels\" & txtStamboeknummerVersturen & ".xlsx"
                            End With
                            
                            OpenWerkboek.Close
                            XL.Close
                            
                            Set OpenWerkboek = Nothing
                            Set XL = Nothing
    Ik wil ook in Access een Excelmacro te laten lopen. Is dat mogelijk? Ik krijg hier een foutmelding op .Range("A2",Selection.End(xlDown)).Select

  2. #2
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Wat gebeurd er als je dat werkboek direct met Excel opent?
    En wat is XL.OpenWerkboek?
    Dat is niet een bij Excel bekende Methode.
    "It's hardware that makes a machine fast. It's software that makes a fast machine slow. "
    Op rechtstreekse vragen via email of privébericht reageer ik niet. Daar is het forum voor.
    Lees ook: http://www.helpmij.nl/forum/announcement.php?f=5

  3. #3
    Senior Member
    Geregistreerd
    4 februari 2014
    Excelfile was wel degelijk corrupt. Dat probleem is opgelost. Bedankt!
    Blijft mijn tweede vraag bestaan: kan ik een macro aanmaken in mijn applicatie met Excelfuncties, zoals
    Code:
    Range("L2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Code:
    With Selection.Validation
            .Delete
            .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween, Formula1:="0", Formula2:="3"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = "Foute ingave"
            .InputMessage = ""
            .ErrorMessage = "Geef juiste waarde in!"
            .ShowInput = True
            .ShowError = True
    End With
    Code:
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Save

  4. #4
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Uiteraard kan je die aanmaken, maar ze zullen alleen werken in de context van een Excel object.
    "It's hardware that makes a machine fast. It's software that makes a fast machine slow. "
    Op rechtstreekse vragen via email of privébericht reageer ik niet. Daar is het forum voor.
    Lees ook: http://www.helpmij.nl/forum/announcement.php?f=5

  5. #5
    Senior Member
    Geregistreerd
    4 februari 2014
    Ik heb reeds op verschillende manieren geprobeert. Maar hoe moet ik bijvoorbeeld deze code op de plaats in mijn procedure krijgen (zie gekleurd gedeelte). Het Excelobject is geopend, dacht ik toch. Hoe zou deze code hier geplaatst moeten worden?
    Code:
        Range("M2:M26,O2,O2:O26,Q2,Q2:Q26").Select
        Range("Q2").Activate
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween, Formula1:="0", Formula2:="3"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = "Foute ingave"
            .InputMessage = ""
            .ErrorMessage = "Geef juiste waarde in!"
            .ShowInput = True
            .ShowError = True
        End With
    Code:
                            Dim XL As Excel.Application
                            Dim OpenWerkboek As Excel.Workbook
                            
                            Set XL = CreateObject("Excel.Application")
                            Set OpenWerkboek = XL.Workbooks.Open("C:\IGEANToets_FE\TeVersturenExcels\" & txtStamboeknummerVersturen & ".xlsx")
                            
                            With XL
                                .Visible = False
                                .DisplayAlerts = False
                                
                                With OpenWerkboek
                                    'vanaf hier Excel formatting
                                    'opletten op iAantalDomeinen!
                                    'eerst aantal Down tellen
                                    .EN HIER MACRO CODE?                                
    
                                End With
                            End With
                            
                            OpenWerkboek.Close
                            XL.Close
                            
                            Set OpenWerkboek = Nothing
                            Set XL = Nothing

  6. #6
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Net zoals je het in Excel zou doen.
    Je moet er nog wel een bladnaam voor zetten.

    Daarnaast heeft dit niets met Access van doen.
    "It's hardware that makes a machine fast. It's software that makes a fast machine slow. "
    Op rechtstreekse vragen via email of privébericht reageer ik niet. Daar is het forum voor.
    Lees ook: http://www.helpmij.nl/forum/announcement.php?f=5

  7. #7
    Tera Honourable Senior Member
    Verenigingslid
    OctaFish's avatar
    Geregistreerd
    6 februari 2009
    Locatie
    Rotterdam
    Afstand tot server
    ±151 km
    De code is prima aan de praat te krijgen.
    Code:
    Sub testExcel()
    Dim XL As Excel.Application
    Dim OpenWerkboek As Excel.Workbook
    Dim rng As Excel.Range
        Set XL = CreateObject("Excel.Application")
        Set OpenWerkboek = XL.Workbooks.Open("C:\IGEANToets_FE\TeVersturenExcels\" & txtStamboeknummerVersturen & ".xlsx")
        With XL
            .Visible = True
            .DisplayAlerts = False
            
            With OpenWerkboek
                Set rng = Union(Range("H2:H26"), Range("M2:M26"), Range("O2:O26"))
                With rng.Validation
                    .Delete
                    .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="0", Formula2:="3"
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = "Testje"
                    .ErrorTitle = "Foute ingave"
                    .InputMessage = "Niet fout doen!"
                    .ErrorMessage = "Geef juiste waarde in!"
                    .ShowInput = True
                    .ShowError = True
                End With
            End With
        End With
        
    ''    OpenWerkboek.Close
    ''    XL.Quit
        
    End Sub
    Gebruik de QUOTE knop alleen als je iets wit citeren.
    Op deze pagina kun je zien hoe je met TAGS werkt.

  8. #8
    Senior Member
    Geregistreerd
    4 februari 2014
    Bedankt, het werkt! . Ik wil de Range variabel maken volgens de invoer van de gebruiker, maar krijg een foutmelding: "Typen komen niet overeen" ->> Set rng = txtRanges. Ik weet niet hoe ik het type van de string moet aanpassen? Graag wat hulp!

    Code:
                            Dim iRijen As Long
                            Dim XL As Excel.Application
                            Dim OpenWerkboek As Excel.Workbook
                            Dim rng As Excel.Range
                            Dim txtRanges As String
                            Dim txtNaamKolom As Strings
                            
                            Set XL = CreateObject("Excel.Application")
                            Set OpenWerkboek = XL.Workbooks.Open("C:\IGEANToets_FE\TeVersturenExcels\" & txtStamboeknummerVersturen & ".xlsx")
                            
                            txtRanges = ""
                            txtNaamKolom = "MOQSUWY" 'Let op slechts 7 domeinen maximaal toe te kennen
                            
                            With XL
                                .Visible = False 'waarom False?
                                .DisplayAlerts = False
                                
                                With OpenWerkboek
                                    'vanaf hier Excel formatting
                                    'opletten op iAantalDomeinen!
                                    'Bepaal het aantal Ranges volgens het aantal iAantalDomeinen
                                    'Opnieuw de integer "i" gebruiken
                                    For i = 1 To iAantalDomeinen
                                        txtRanges = txtRanges + "Range(""" & Mid(txtNaamKolom, i, 1) & ";" & iAantalLeerlingen & """),"
                                    Next i
                                    txtRanges = "Union(" & Mid(txtRanges, 1, Len(txtRanges) - 1) & ")"
                                    
                                    Set rng = txtRanges
                                    
                                    With rng.Validation
                                        .Delete
                                        .Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="0", Formula2:="3"
                                        .IgnoreBlank = True
                                        .InCellDropdown = True
                                        .InputTitle = "Punten ingeven"
                                        .ErrorTitle = "Foute ingave"
                                        .InputMessage = "Geef hier je punten in."
                                        .ErrorMessage = "Geef juiste waarde in!"
                                        .ShowInput = True
                                        .ShowError = True
                                    End With
    
                                End With
                                OpenWerkboek.SaveAs "C:\IGEANToets_FE\TeVersturenExcels\" & txtStamboeknummerVersturen & ".xlsx"
                            End With
                            
                            OpenWerkboek.Close
                            XL.Close
                            
                            Set OpenWerkboek = Nothing
                            Set XL = Nothing

  9. #9
    Tera Honourable Senior Member
    Verenigingslid
    OctaFish's avatar
    Geregistreerd
    6 februari 2009
    Locatie
    Rotterdam
    Afstand tot server
    ±151 km
    Je maakt de fout dat je commando's vervangt door tekst. Dat kan natuurlijk nooit.
    Code:
    Sub testje()
    Dim txtNaamKolom As String, arr() As Variant
    Dim rng As Range
    
        txtNaamKolom = "MOQSUWY" 'Let op slechts 7 domeinen maximaal toe te kennen
        For i = 0 To Len(txtNaamKolom) - 1
            ReDim Preserve arr(i)
            arr(i) = Mid(txtNaamKolom, i + 1, 1)
        Next i
        For i = LBound(arr) To UBound(arr)
            If i = LBound(arr) Then
                Set rng = Range("" & arr(i) & ":" & arr(i) & "")
            Else
                Set rng = Union(rng, Range("" & arr(i) & ":" & arr(i) & ""))
            End If
            MsgBox rng.Address
        Next i
    
    End Sub
    Gebruik de QUOTE knop alleen als je iets wit citeren.
    Op deze pagina kun je zien hoe je met TAGS werkt.

  10. #10
    Senior Member
    Geregistreerd
    4 februari 2014
    Geweldig! Bedankt! . Heb de Option Base op 1 gezet anders krijgt de LBound(arr) de laagste waarde 0. Toch nog wat theoretische kennis nodig. Msg rng.Address geeft "$M:$M,$O:$O,$Q:$Q". Hoe weet Excel dat dat hier bijvoorbeeld verwezen wordt naar Range("M2:M25")?

  11. #11
    Senior Member
    Geregistreerd
    4 februari 2014
    In Excel wordt de opdracht .ErrorTitle, .ErrorMessage niet uitgevoerd ofschoon .ShowError = True.

  12. #12
    Tera Honourable Senior Member
    Verenigingslid
    OctaFish's avatar
    Geregistreerd
    6 februari 2009
    Locatie
    Rotterdam
    Afstand tot server
    ±151 km
    Quote Origineel gepost door so10070 Bekijk Bericht
    Msg rng.Address geeft "$M:$M,$O:$O,$Q:$Q". Hoe weet Excel dat dat hier bijvoorbeeld verwezen wordt naar Range("M2:M25")?
    Dat weet Excel uiteraard niet; ik heb jouw voorbeeldcode aangepast. Daarbij ben ik uitgegaan van txtNaamKolom = "MOQSUWY" Dus daar heb ik de ranges op gebaseerd, en dan krijg je complete kolommen. Ik ging er eigenlijk vanuit dat je daar zelf wel a.d.h.v. het voorbeeld de juiste ranges van kan maken .
    Code:
    Sub testExcel()
    Dim XL As Excel.Application
    Dim OpenWerkboek As Excel.Workbook
    Dim rng As Excel.Range
    Dim arr() As Variant, iR As Integer
    Const txtNaamKolom As String = "MOQSUWY"    'Let op slechts 7 domeinen maximaal toe te kennen
        
        iR = InputBox("Typ het aantal rijen:", "Aantal rijen", 25)
        If Not IsNumeric(iR) Then Exit Sub
        
        Set XL = CreateObject("Excel.Application")
        Set OpenWerkboek = XL.Workbooks.Open("H:\Mijn documenten\Downloads\HelpMij\Test\XLS\aantallen.als.xlsx")
        With XL
            .Visible = True
            .DisplayAlerts = False
            
            With OpenWerkboek
                For i = 0 To Len(txtNaamKolom) - 1
                    ReDim Preserve arr(i)
                    arr(i) = Mid(txtNaamKolom, i + 1, 1)
                Next i
                For i = LBound(arr) To UBound(arr)
                    If i = LBound(arr) Then
                        Set rng = Range("" & arr(i) & "2:" & arr(i) & iR & "")
                    Else
                        Set rng = Union(rng, Range("" & arr(i) & "2:" & arr(i) & iR & ""))
                    End If
                    MsgBox rng.Address
                Next i
                With rng.Validation
                    .Delete
                    .Add type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="0", Formula2:="3"
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = "Testje"
                    .ErrorTitle = "Foute ingave"
                    .InputMessage = "Niet fout doen!"
                    .ErrorMessage = "Geef juiste waarde in!"
                    .ShowInput = True
                    .ShowError = True
                End With
            End With
        End With
    End Sub
    Wat betreft je laatste opmerking: die krijg ik ook niet aan de praat als ik handmatig een foutmelding maak op getallen. Toch heeft de functie wel gewerkt...
    Gebruik de QUOTE knop alleen als je iets wit citeren.
    Op deze pagina kun je zien hoe je met TAGS werkt.

  13. #13
    Senior Member
    Geregistreerd
    4 februari 2014
    De Error-opmerkingen worden nu wel getoond.
    De code zelf moet ik nog aanpassen.

  14. #14
    Tera Honourable Senior Member
    Verenigingslid
    OctaFish's avatar
    Geregistreerd
    6 februari 2009
    Locatie
    Rotterdam
    Afstand tot server
    ±151 km
    Easy peasy . (Appeltje eitje )
    Gebruik de QUOTE knop alleen als je iets wit citeren.
    Op deze pagina kun je zien hoe je met TAGS werkt.

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren