Hvordan får jeg en rekke adresse inkludert navnet på regnearket, men ikke arbeidsboken navn, i Excel VBA?

stemmer
32

Hvis jeg har en Range objekt - for eksempel, la oss si at det refererer til celle A1i et regneark kalt Book1. Så jeg vet at ringer Address() skal få meg en enkel lokal referanse: $A$1. Jeg vet det kan også bli kalt som Address(External:=True)å få en referanse inkludert arbeidsbok navn og regneark navn: [Book1]Sheet1!$A$1.

Det jeg ønsker er å få en adresse inkludert arket navn, men ikke boken navn. Jeg har ikke lyst til å ringe Address(External:=True)og prøve å strippe ut arbeidsboken navn meg med strengfunksjoner. Er det noen kaller jeg kan gjøre på området for å få Sheet1!$A$1?

Publisert på 25/09/2008 klokken 00:11
kilden bruker
På andre språk...                            


11 svar

stemmer
45

Eneste måten jeg kan tenke på er å sette sammen navnet på regnearket med cellereferanse, som følger:

Dim cell As Range
Dim cellAddress As String
Set cell = ThisWorkbook.Worksheets(1).Cells(1, 1)
cellAddress = cell.Parent.Name & "!" & cell.Address(External:=False)

REDIGERE:

Endre siste linjen til:

cellAddress = "'" & cell.Parent.Name & "'!" & cell.Address(External:=False) 

hvis du ønsker det til å fungere selv om det er mellomrom eller andre morsomme figurer i arket navn.

Svarte 25/09/2008 kl. 00:23
kilden bruker

stemmer
4

Ben er riktig. Jeg kan heller ikke tenke på noen måte å gjøre dette. Jeg vil foreslå enten metoden Ben anbefaler, eller følgende å strippe den arbeidsbok navn av.

Dim cell As Range
Dim address As String
Set cell = Worksheets(1).Cells.Range("A1")
address = cell.address(External:=True)
address = Right(address, Len(address) - InStr(1, address, "]"))
Svarte 25/09/2008 kl. 00:36
kilden bruker

stemmer
-2

[Rediger på 2009-04-21]

    Som Micah påpekt, dette fungerer bare når du har navngitt som
    spesielt område (derav .name anyone?) Ja, oops!

[/redigere]

Litt sent til festen, jeg vet, men i tilfelle noen andre fanger dette i et google-søk (som jeg nettopp gjorde), kan du også prøve følgende:

Dim cell as Range
Dim address as String
Set cell = Sheet1.Range("A1")
address = cell.Name

Dette bør returnere full adresse, noe som "= Ark1! $ A $ 1".

Forutsatt at du ikke ønsker likhetstegnet, kan du kle den av med en Erstatt funksjon:

address = Replace(address, "=", "")
Svarte 27/03/2009 kl. 02:58
kilden bruker

stemmer
-1

Hvorfor ikke bare gå tilbake regnearket navn med adresse = cell.Worksheet.Name så kan du sette sammen adressen tilbake på denne måten adresse = cell.Worksheet.Name & "!" & cell.Address

Svarte 06/07/2009 kl. 22:05
kilden bruker

stemmer
3

Den Address()regnearkfunksjonen gjør nettopp det. Som det ikke er tilgjengelig gjennom Application.WorksheetFunction, kom jeg opp med en løsning ved hjelp av Evaluate()metoden.

Denne løsningen lar Excel avtaler med mellomrom og andre morsomme figurer i arket navn, som er en fin fordel i forhold til de tidligere svarene.

Eksempel:

Evaluate("ADDRESS(" & rng.Row & "," & rng.Column & ",1,1,""" & _
    rng.Worksheet.Name & """)")

returnerer akkurat "Ark1! $ A $ 1", med et Rangeobjekt som heter rnghenviser A1 celle i Ark1 regnearket.

Denne løsningen returnerer bare adressen til den første cellen i et område, ikke adressen til hele spekteret (vs "Sheet1 $ A $ 1: $ B $ 2" "Sheet1 $ A $ 1!"). Så jeg bruker det i en egendefinert funksjon:

Public Function AddressEx(rng As Range) As String

    Dim strTmp As String

    strTmp = Evaluate("ADDRESS(" & rng.Row & "," & _
        rng.Column & ",1,1,""" & rng.Worksheet.Name & """)")

    If (rng.Count > 1) Then

        strTmp = strTmp & ":" & rng.Cells(rng.Count) _
            .Address(RowAbsolute:=True, ColumnAbsolute:=True)

    End If

    AddressEx = strTmp

End Function

Den fullstendige dokumentasjonen av adresse () regnearkfunksjonen er tilgjengelig på Office: https://support.office.com/en-us/article/ADDRESS-function-D0C26C0D-3991-446B-8DE4-AB46431D4F89

Svarte 12/08/2009 kl. 11:08
kilden bruker

stemmer
-1
Dim rg As Range
Set rg = Range("A1:E10")
Dim i As Integer
For i = 1 To rg.Rows.Count

    For j = 1 To rg.Columns.Count
    rg.Cells(i, j).Value = rg.Cells(i, j).Address(False, False)

    Next
Next
Svarte 25/03/2011 kl. 09:48
kilden bruker

stemmer
12
Split(cell.address(External:=True), "]")(1)
Svarte 30/07/2013 kl. 16:43
kilden bruker

stemmer
0

Jeg fant følgende jobbet for meg i en brukerdefinert funksjon jeg har laget. Jeg sammenkjedet celleområdet referanse og regneark navn som en streng og deretter brukt i en Vurdere utsagn (jeg brukte Evaluere på SUMPRODUCT).

For eksempel:

Function SumRange(RangeName as range)   

Dim strCellRef, strSheetName, strRngName As String

strCellRef = RangeName.Address                 
strSheetName = RangeName.Worksheet.Name & "!" 
strRngName = strSheetName & strCellRef        

Så se strRngName i resten av koden din.

Svarte 08/06/2014 kl. 22:02
kilden bruker

stemmer
0

Du må kanskje skrive kode som håndterer en rekke med flere områder, som denne gjør:

Public Function GetAddressWithSheetname(Range As Range, Optional blnBuildAddressForNamedRangeValue As Boolean = False) As String

    Const Seperator As String = ","

    Dim WorksheetName As String
    Dim TheAddress As String
    Dim Areas As Areas
    Dim Area As Range

    WorksheetName = "'" & Range.Worksheet.Name & "'"

    For Each Area In Range.Areas
'           ='Sheet 1'!$H$8:$H$15,'Sheet 1'!$C$12:$J$12
        TheAddress = TheAddress & WorksheetName & "!" & Area.Address(External:=False) & Seperator

    Next Area

    GetAddressWithSheetname = Left(TheAddress, Len(TheAddress) - Len(Seperator))

    If blnBuildAddressForNamedRangeValue Then
        GetAddressWithSheetname = "=" & GetAddressWithSheetname
    End If

End Function
Svarte 19/01/2015 kl. 11:29
kilden bruker

stemmer
0

.Address (,,, TRUE) (Viser Ekstern Adresse Full adresse) :-)

Svarte 13/07/2016 kl. 06:12
kilden bruker

stemmer
-1

For forvirret gamle meg en rekke

.Address (False, False, eller sann)

synes å gi i format TheSheet B4: K9

Hvis den gjør det ikke derfor de kriteriene .. unngå Str functons

vil trolig bare ta mindre et millisekund og bruke 153 allerede brukt elektroner

0,3 mikrosekunder

RaAdd = midt (RaAdd, instr (raadd, "]") 1)

eller

'ca 1,7 mikrosekunder

RaAdd = split (Radd, "]") (1)

Svarte 13/01/2017 kl. 03:33
kilden bruker

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