Endre et regneark ved hjelp av en VB makro

stemmer
2

Jeg har to regneark ... når man blir endret på en bestemt måte jeg ønsker å ha en makro kjøre som modifiserer andre på en hensiktsmessig måte. Jeg har allerede isolerte tilfelle jeg må handle på (den modifikasjon av en hvilken som helst celle i en bestemt kolonne), jeg kan ikke synes å finne noen konkret informasjon om tilgang til og å modifisere en annen arket (dette regnearket er plassert på et annet lokalnett deler også ... brukeren har tilgang til begge, skjønt).

Eventuelle hjelpe ville være stor. Referanser på hvordan du gjør dette eller noe lignende er like god som konkrete kodeeksempler.

Publisert på 08/09/2008 klokken 23:56
kilden bruker
På andre språk...                            


4 svar

stemmer
5

I Excel, vil du sannsynligvis bare skrive kode for å åpne den andre regneark, endre den og deretter lagre dataene.

Se denne opplæringen for mer info.

Jeg må redigere min VBA senere, så later dette er pseudokode, men det skal se omtrent slik ut:

Dim xl: Set xl = CreateObject("Excel.Application")
xl.Open "\\the\share\file.xls"

Dim ws: Set ws = xl.Worksheets(1)
ws.Cells(0,1).Value = "New Value"
ws.Save

xl.Quit constSilent
Svarte 09/09/2008 kl. 00:07
kilden bruker

stemmer
0

Du kan åpne et regneark i en enkelt linje:

Workbooks.Open FileName:="\\the\share\file.xls"

og refererer til det som den aktive arbeidsboken:

Range("A1").value = "New value"
Svarte 09/09/2008 kl. 06:09
kilden bruker

stemmer
0

Kopier følgende i ThisWorkbookobjektet for å se etter konkrete endringer. I dette tilfellet når du øker en numerisk verdi til en annen numerisk verdi.

NB: du må erstatte Workbook-SheetChangeog Workbook-SheetSelectionChangemed en understrek. Ex: Workbook_SheetChangeog Workbook_SheetSelectionChangeunderstreken blir rømte i Markdown kode.

Option Explicit
Dim varPreviousValue As Variant ' required for IsThisMyChange() . This should be made more unique since it's in the global space.


Private Sub Workbook-SheetChange(ByVal Sh As Object, ByVal Target As Range)
  ' required for IsThisMyChange()
  IsThisMyChange Sh, Target
End Sub

Private Sub Workbook-SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  '  This implements and awful way of accessing the previous value via a global.
  '  not pretty but required for IsThisMyChange()
  varPreviousValue = Target.Cells(1, 1).Value ' NB: This is used so that if a Merged set of cells if referenced only the first cell is used
End Sub

Private Sub IsThisMyChange(Sh As Object, Target As Range)
  Dim isMyChange As Boolean
  Dim dblValue As Double
  Dim dblPreviousValue As Double

  isMyChange = False

  ' Simple catch all. If either number cant be expressed as doubles, then exit.
  On Error GoTo ErrorHandler
  dblValue = CDbl(Target.Value)
  dblPreviousValue = CDbl(varPreviousValue)
  On Error GoTo 0 ' This turns off "On Error" statements in VBA.


  If dblValue > dblPreviousValue Then
     isMyChange = True
  End If


  If isMyChange Then
    MsgBox ("You've increased the value of " & Target.Address)
  End If


  ' end of normal execution
  Exit Sub


ErrorHandler:
  ' Do nothing much.
  Exit Sub

End Sub

Hvis du ønsker å endre en annen arbeidsbok basert på dette, ville jeg tenke på å sjekke for å se om arbeidsboken er allerede åpen først ... eller enda bedre utforme en løsning som kan batch opp alle endringene og gjøre dem på en gang. Kontinuerlig endring annet regneark basert på at du lytter til dette kan være smertefullt.

Svarte 09/09/2008 kl. 06:47
kilden bruker

stemmer
0

Etter å ha spilt med dette en stund, fant jeg Michaels pseudo-kode var det nærmeste, men her er hvordan jeg gjorde det:

Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open "\\owghome1\bennejm$\testing.xls"
xl.Sheets("Sheet1").Select

Deretter manipulere arket ... kanskje slik ut:

xl.Cells(x, y).Value = "Some text"

Når du er ferdig, kan du bruke disse linjene til slutt opp:

xl.Workbooks.Close
xl.Quit

Hvis endringer er gjort, vil brukeren bli bedt om å lagre filen før det er lukket. Det kan være en måte å spare automatisk, men denne måten er faktisk bedre så jeg drar det som det er.

Takk for all hjelp!

Svarte 10/09/2008 kl. 14:45
kilden bruker

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