Sel otomatis setelah fungsi kembali

0

Saya memiliki xla dengan banyak fungsi. Pada dasarnya masing-masing fungsi ini melakukan pencarian vertikal pada lembar kerja lain. Berikut adalah contoh dasar dari salah satunya:

Function ax2Project_Address(projectnumber)
If (projectnumber = "?") Then
    ax2Project_Address = "Unknown address"
Else
    ax2Project_Address = Application.VLookup(projectnumber, Sheets("AX Data").Range("A:K"), 11, False)
End Function

Ini memungkinkan pengguna untuk cukup memanggil fungsi dengan nomor proyek pada lembar kerja dan memberi mereka alamat, tanpa harus menulis sendiri pencarian vertikal.
Yang ingin saya lakukan sekarang adalah memiliki baris sel saat ini untuk secara otomatis menyesuaikan ketinggiannya dengan kontennya. Masalahnya adalah bahwa ini jelas harus dilakukan setelah sel diisi dengan alamat, tetapi karena fungsi berakhir setelah kembali, perintah autofit tidak akan dieksekusi.

Apakah ada cara untuk menjalankan perintah autofit dalam suatu fungsi setelah pengembalian?
Atau ada pendekatan yang sangat berbeda yang bisa saya gunakan?

Nils Tiebos
sumber
Anda dapat menulis kode Worksheet_calculate acara dan itu akan berjalan setiap kali lembar telah dihitung ulang.
Máté Juhász
Tidak yakin versi Excel apa yang Anda gunakan, tetapi apakah Anda sudah melihat Metode autofit ? Mungkin menambahkannya di akhir fungsi Anda atau menyebutnya secara terpisah.
CharlieRB
1
Anda tidak bisa menggunakan fungsi lembar kerja untuk mengubah apa pun selain konten sel. Ada solusi menggunakan Application.Evaluate tapi aku tidak bisa membuatnya bekerja Autofit. saya pikir Worksheet_calculate acara adalah taruhan terbaik Anda.
Kyle
@ Máté Menggunakan acara tidak berfungsi, apakah mungkin ini hanya berlaku untuk fungsi lembar kerja, bukan untuk fungsi tertulis VBA?
Nils Tiebos
@CharlieRB Saya menggunakan Excel 2013. Saya tahu tentang metode Autofit, tetapi masalahnya saya tidak bisa menyebutnya di dalam fungsi, karena ketika data dimasukkan ke dalam sel, fungsi berakhir, karena ini adalah pengembalian nilai.
Nils Tiebos

Jawaban:

0

Fungsi tidak dapat mengubah apa pun di excel kecuali untuk sel yang dipanggil. Yang dikatakan, saya cukup yakin suatu fungsi dapat memicu rutinitas -

Option Explicit

Public Function eieio(numb As Long) As Long
    eieio = Int(numb / 2)
    Test
End Function


Sub Test()
MsgBox ("hi")
End Sub

eieio (12) = 6 dan msgbox "hi"

Yang sedang berkata, apa yang Anda tidak bisa lakukan sesuatu seperti ini -

Option Explicit

Public Function eieio(numb As Long) As Long
    eieio = Int(numb / 2)
    Test
End Function


Sub Test()
Dim str As String
str = Application.Caller.Address
Dim rng As Range
Set rng = Range(str)
MsgBox (rng.Address)
rng.EntireRow.AutoFit
End Sub

Jadi rutinitas tidak dapat mengubah aplikasi. Panggilan sejauh yang saya tahu. Selalu seperti itu.

Raystafarian
sumber
Contoh kedua Anda berfungsi jika alih-alih Test() Anda menggunakan Worksheet_Calculate() acara untuk autofit berdasarkan variabel global. Me.Cells(x,1).EntireRow.Autofit
Kyle
@Kyle ya, saya berhasil menggunakannya Worksheet_Change jadi saya bisa melewati target, tetapi itu tidak konsisten. Saya hanya bisa memasukkannya ke dalam worksheet_change dan membiarkannya melakukan autofit semua yang terjadi, tetapi itu lemah. Kami membutuhkan metode intersect.
Raystafarian
Saya pikir sebagian besar orang telah menyerah pada penyelesaian karena pemformatan bersyarat akan melakukan apa yang orang inginkan.
Raystafarian
0

Jika Anda tidak ingin autofit seluruh sheet gunakan ini dalam modul kode Lembar Kerja:

Private Sub Worksheet_Calculate()
    Dim a As Range
    For Each a In Me.UsedRange
        If a.Formula Like "=ax2Project_Address(*" Then a.EntireRow.AutoFit
    Next a

End Sub
Kyle
sumber