Avatar billede aviation Nybegynder
22. juni 2007 - 17:30 Der er 12 kommentarer og
1 løsning

aktivering af celle i en anden workbook

Jeg vil lige spørge om alle de kloge hoveder er gået på ferie eller om jeg gør noget forkert på dette medie da jeg på nuværende tidspunkt har to spørgsmål som ikke har fået nogen svar på.

i stedet har jeg knoglet på at løse opgaven (er meget ny i programereing. Det jeg ønsker er:
Ved aktivering af en knap i en workbook (nummer)
at komme til en anden workbook, uden at denne åbnes finde den sidste celle i række b , hvorefter der flyttes til række a og en celle ned. Her skrives så tallet fra cellen ovenover i række a + 1.
dette tal sendes så retur til workbook (nummer)
Begge workbooks ligger i samme biblotek.
her er mit forsøg: den første del virker og jeg får Nummer åbnet det er for at jeg kan se hvad der sker meningen er at den ikke skal åbnes men hvis den er åbnet er det ok.
del to kan jeg også få til at virke men den vælger kun b2 selv om der er skrevet noget i cellen, herefter kommer der fejl

jeg mangler så det sidste med et nummer som bliver sendt retur til en celle

Private Sub strtilbudsnummer_Click()
Private Sub strHome_Click()
Dim wb As Workbook
    Dim wbOpen As Boolean
    Dim wbFilename As String
   
    wbOpen = False
    wbFilename = "tilbudsnummer.xls"
   
    For Each wb In Application.Workbooks
        If wb.Name = wbFilename Then
            wbOpen = True
            wb.Activate
        End If
    Next
        If wbOpen = False Then
    Workbooks.Open Filename:=ThisWorkbook.Path & "\ tilbudsnummer.xls ", ReadOnly:=True
    Application.Windows.Arrange xlArrangeStyleCascade
    End If

'del 2

    If  Range("b2").Value = "" Then
      Range("a2").Select
    Else
    lastrow = Cells(Rows.Count, ActiveSheet, "b").End(xlUp).Row
    Range("b" & lastrow + 1).Select
    End If
'End If
  With ActiveCell
   
        .Offset(0, -1).Select
     
  End With
 
  End Sub
Avatar billede word-hajen Nybegynder
22. juni 2007 - 19:27 #1
Public Sub GetNumber()
    Dim objOpenWB As Workbook
    Dim objWB As Workbook
    Dim objWS As Worksheet
    Dim strFilename As String
    Dim objBRange As Range
    Dim lngNumber As Long
    Dim lngNewNumber As Long

    strFilename = "tilbudsnummer.xls"
   
    For Each objOpenWB In Application.Workbooks
        If objOpenWB.Name = strFilename Then
            Set objWB = objOpenWB
            Exit For
        End If
    Next
   
    If objWB Is Nothing Then
        Set objWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strFilename)
    End If
   
    Set objWS = objWB.Sheets(1)
    Set objBRange = objWS.Columns(2).SpecialCells(xlLastCell)
   
    lngNumber = objBRange.Offset(0, -1).Value
    lngNewNumber = lngNumber + 1
   
    objBRange.Offset(1, -1).Value = lngNewNumber
   
    Set objWB = Nothing
    Set objWS = Nothing
    Set objBRange = Nothing
End Sub
********************

Du har nu nummeret i lngNewNumber, hvis du skal bruge det i din "startfil".

Jeg kunne ikke lige gennemskue, hvorfor du ville i celle B2, hvis den er tom. Skal du ikke "bare" i den sidste celle i kolonne B? Det er i hvertfald, hvad jeg er gået ud fra. Ellers må du forklare nærmere.

Obs! I din kode åbner du tilbudsnummerfilen som read only, men da jeg går ud fra, at du gerne vil kunne gemme det nye nummer i filen, åbner min kode IKKE filen som read only.
Avatar billede aviation Nybegynder
23. juni 2007 - 07:30 #2
tak for det grunden til at jeg vil anvende kolonne b er at der når der bliver aktiveret et tilbudsnummer skal der komme en del oplysninger navn adresse ol fra tilbudssuden som har aktiveringsknappen. Det med read only er fordi jeg har glemt at slette det da jeg kopierede det over til ekspert. Det jeg gerne vil er at tilbudsnummerfilen ikke bliver åbnet og samtidig når der denne procedure er kørt igennem bliver siden gemt automatisk
eks der står aet navn i cellerne b2-b4 så vil der også være tilbudsnumre i a2-a4derfor skal nyt nummer være i a5 hvis der ikke kommer information fra tilbudet til b5 vil dette nummer også blive brugt næste gang.
Jeg håber det vil kunne lade sig gøre
Avatar billede word-hajen Nybegynder
23. juni 2007 - 11:06 #3
Du kan ikke trække data ud fra en Excel-fil uden at åbne den (med mindre du bruger Excel 2007 og så skal vi til at rode i de xml-filer, som ligger bag det nye filformat) - og du skal jo også gemme det nye nummer i filen (går jeg ud fra).

Hvis du vil tilføje en Gem til ovenstående, kan det gøres til sidst i ovennævnte procedure:

objWB.Save

Har du prøvet ovennævnte procedure af? Jeg forstår ikke helt din yderligere information, så prøv ovennævnte af, og hvis du ikke får det ud af det, som du gerne vil, må du melde tilbage.
Avatar billede aviation Nybegynder
23. juni 2007 - 13:36 #4
Det var moske bedre at generere tælleværket i tilbudssystemet og så sende det med over i tilbudsnummer (det skulle gerne blive til en tilbudsjournal )som skal opsamle data hver gang der bliver givet et tilbud. grunden til at jeg laver en knapfunktion er at man godt kan lave beregninger uden at afgive et tilbud disse skal ikke samles op da det er unødvendig. Det du sendte fungerer fint det ville bare være godt hvis jeg kunne gemme data i baggrunden dog hvis siden er åbnet skal den selvfølgelig stadig samle data op. Jeg har været inde på dette spørgsmål før men har ikke fået svar så kan du hjælpe mig er der rigeligt point eller hvad der nu skal til
Avatar billede aviation Nybegynder
23. juni 2007 - 14:27 #5
Med hensyn til at wb åbner er jo ingen problem for vi kan jo bare afslutte med at den gemmer og lukker så fungere det. Den du har sendt mig fungere som tidliger sagt fint bortset fra at hver gang jeg trykker på knappen laver den et nyt nummer og det skal den kun hvis der står noget i cellen ovenover i kolonne b står der ikke noget i den skal den blive ved det nummer som blev genereret sidst
Avatar billede word-hajen Nybegynder
23. juni 2007 - 14:45 #6
Ang. din kommentar 13:36:29 om, at der er rigeligt point, men at du ikke har fået svar. Det handler for mig absolut ikke om point, men derimod om, at jeg har svært ved at gennemskue, hvad det er, du spørger om.

Hvis siden er åbnet... hvilken side? Gemme data i baggrunden ... hvilke data? Hvis det er det nye nummer, så eksisterer det i lngNewNumber, som jeg også har skrevet i kommentaren med proceduren. Hvis du så skal bruge nummeret andetsteds, kan du trække det derfra. Det nye nummer er sat ind i Excel-filen, så hvis du vil beholde nummeret der, skal du blot gemme Excel-filen (har jeg i øvrigt også skrevet, hvordan du gør).

Hvad mener du med, at den kun skal generere et nyt nummer, hvis der står noget i cellen ovenover i kolonne b? Cellen ovenover - ovenover hvad?
Avatar billede aviation Nybegynder
23. juni 2007 - 16:15 #7
Hvis du forestiller dig at der er to excel filer (workbooks) den ene er et tilbudssystem og den anden er tilbudsjournal.
Når jeg i tilbudssystemet aktiverer en knap (nyt tilbudsnummer) skal den gå over i Journalen og generere et nyt nummer samtidig indsætte en række data i cellerne i den række hvor det nye nummer er genereret ( navn adress pris m.m.. EKS. nyt nummer generers i celle A6 så skal data fra forskellige celler i tilbudssystemet førers over i række 6 men hvis brugeren ikke har indsat navn i tilbudssystemet skal der ikke overføres data og det generede tilbusnummer skal så anvendes næste gang derfor hvis der ikke i står et navn i b5 skal der ikke komme et nyt nummer i A7.
Jeg siger tak for din tolmodighed nu håber jeg at jeg har fået forklaret mig ordentlig.
i øvrigt har jeg fået send nyt nummer tilbage til tilbudssystemet ved at anvende sPage
men hvordan får jeg sPage indsat i den valgte celle.
Grunden til at jeg i det første bruger nummer og tilbudsnummer er at jeg har oprette et testprogram og vil have det til at kører inden det kommer over i tilbudssystemet.
Avatar billede aviation Nybegynder
23. juni 2007 - 16:22 #8
jeg vil lige sige at jeg har fået tilbudsnummeret tilbage til den første excel fil
du får lige en kopi at det jeg er kommet frem til
Private Sub strtilbudsnummer_Click()
Dim objOpenWB As Workbook
    Dim objWB As Workbook
    Dim objWS As Worksheet
    Dim strFilename As String
    Dim objBRange As Range
    Dim lngNumber As Long
    Dim lngNewNumber As Long
    Dim strGA As String
    Dim sPage As String
   
    strFilename = "tilbudsnummer.xls"
   
   
   
    For Each objOpenWB In Application.Workbooks
        If objOpenWB.Name = strFilename Then
            Set objWB = objOpenWB
            Exit For
        End If
    Next
   
    If objWB Is Nothing Then
        Set objWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strFilename)
    End If
   
    Set objWS = objWB.Sheets(1)
    Set objBRange = objWS.Columns(2).SpecialCells(xlLastCell)
   
    lngNumber = objBRange.Offset(0, -1).Value
    lngNewNumber = lngNumber + 1
   
    objBRange.Offset(1, -1).Value = lngNewNumber
    sPage = lngNewNumber
    'MsgBox (sPage)
   
    objWB.Save
    objWB.Close
   
    Set objWB = Nothing
    Set objWS = Nothing
    Set objBRange = Nothing

    strGA = "nummer.xls"
  For Each objOpenWB In Application.Workbooks
  If objOpenWB.Name = strGA Then
            Set objWB = objOpenWB
            Exit For
        End If
Next
   
    If objWB Is Nothing Then
        Set objWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strGA)
    End If
    Sheets("ark1").Range("a2").Select
  Selection = (sPage)
       
 
    'MsgBox (sPage)
   
   
End Sub
Avatar billede aviation Nybegynder
23. juni 2007 - 16:43 #9
jeg håber ikke det er belastende men jeg har lige et mere enkelt foreslag:
Private Sub strtilbudsnummer_Click()
Dim objOpenWB As Workbook
    Dim objWB As Workbook
    Dim objWS As Worksheet
    Dim strFilename As String
    Dim objBRange As Range
    Dim lngNumber As Long
    Dim lngNewNumber As Long
    Dim sPage As String
   
    strFilename = "tilbudsnummer.xls"
   
   
   
    For Each objOpenWB In Application.Workbooks
        If objOpenWB.Name = strFilename Then
            Set objWB = objOpenWB
            Exit For
        End If
    Next
   
    If objWB Is Nothing Then
        Set objWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strFilename)
    End If
   
    Set objWS = objWB.Sheets(1)
    Set objBRange = objWS.Columns(2).SpecialCells(xlLastCell)
   
    lngNumber = objBRange.Offset(0, -1).Value
    lngNewNumber = lngNumber + 1
   
    objBRange.Offset(1, -1).Value = lngNewNumber
    sPage = lngNewNumber
    'MsgBox (sPage)
   
    objWB.Save
    objWB.Close
   
    Set objWB = Nothing
    Set objWS = Nothing
    Set objBRange = Nothing

    Sheets("tariff").Range("a2").Select
    Selection = (sPage)
       
 
    'MsgBox (sPage)
   
   
End Sub

jeg har ændret navnet på arket (tariff)så der kun det ene navn fremkommer i de åben filer.
Avatar billede word-hajen Nybegynder
23. juni 2007 - 18:04 #10
Nu går jeg så bare over til at kommentere dit seneste forslag.

Hvorfor laver du en string, som du sætter lig med lngNewNumber? Det er der ingen grund til.
Medmindre du gerne vil have, at din markør står i A2 i det oprindelige ark, er der heller ingen grund til at selecte cellen. Brug i stedet:

Sheets("tariff").range("A2").value = lngNewNumber

Du kan i øvrigt også slå objWB.Save og objWB.Close sammen til:

objWB.close true

Så både gemmer og lukker du filen i ét.
Avatar billede aviation Nybegynder
25. juni 2007 - 06:08 #11
Jeg er kommet godt videre og foreløbig tak for hjælpen
Avatar billede aviation Nybegynder
25. juni 2007 - 06:15 #12
nu er kommet til det svære hvor er det nu jeg overfører point
Avatar billede word-hajen Nybegynder
25. juni 2007 - 08:15 #13
Velbekomme.

Jeg tillader mig at gå ud fra, at det er mig, du vil tildele point. I så fald kan du først gøre det, når jeg har lagt det svar (det er så det her). Der skulle så være en firkantet boks, som du kan klikke i og tildele point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester