我有三个关于excel--vba的问题。(最主要的是关于公共对话框) 请教懂得excel vba编程的高手如何用vba写一个宏运行...

作者&投稿:潮颜 (若有异议请与网页底部的电邮联系)
第一个问题转置粘贴即可

第二的问题楼上回答是错误的。当然直接用excel函数通常情况下是不可以的,不过我们可以曲线救国,excel中表格可以用的函数,在VBA中也可以用,只需通过WorksheetFunction对象就可以引用,后面加函数名称,然后加range来引用单元格。举个例子:
Application.WorksheetFunction.Max(range("A1:C5"))

下面就是如何在VBA中使用excel自带函数的文章。说简单其实很简单,根据我的经历,仔细阅读一下非常非常有好处,以后能省大力气,因为这个绝对会经常用到。如果嫌罗嗦,直接看看例子就明白怎么用了。但强烈建议你收藏起来以后阅读。

在 Visual Basic 语句中可以使用大多数 Microsoft Excel 工作表函数。若要查看可以使用的工作表函数列表,请参阅 Visual Basic 可使用的工作表函数列表。

注意 一些工作表函数在 Visual Basic 中是不实用的。例如:Concatenate 函数就不实用,因为在 Visual Basic 中可使用 & 运算符来连接多个文本值。

从 Visual Basic 中调用工作表函数
在 Visual Basic 中,通过 WorksheetFunction 对象可使用 Microsoft Excel 工作表函数。

以下 Sub 过程使用 Min 工作表函数来决定在某个单元格区域中的最小值。首先,将变量 myRange 声明为 Range 对象,然后将其设置为 Sheet1 上的 A1:C10 单元格区域。指定另一个变量 answer 为对 myRange 应用 Min 函数的结果。最后,answer 的值就被显示在消息框中。

Sub UseFunction()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer
End Sub
如果您使用的工作表函数需要一个单元格区域引用作为参数,则必须指定一个 Range 对象。例如:您可以用 Match 工作表函数搜索单元格区域。可以在工作表单元格中输入公式,如“=MATCH(9,A1:A10,0)”。但是,您应在 Visual Basic 过程中指定一个 Range 对象来获取相同的结果。

Sub FindFirst()
myVar = Application.WorksheetFunction _
.Match(9, Worksheets(1).Range("A1:A10"), 0)
MsgBox myVar
End Sub
注意 Visual Basic 函数不使用 WorksheetFunction 识别符。函数可能和 Microsoft Excel 的函数同名但作用各异。例如:Application.WorksheetFunction.Log 和 Log 将返回不同的值。

在单元格中插入工作表函数
若要在单元格中插入工作表函数,请指定函数作为相应的 Range 对象的 Formula 属性值。以下示例中,将 RAND 工作表函数(可生成随机数)赋给了活动工作簿中 Sheet1 上 A1:B3 单元格区域的 Formula 属性。

Sub InsertFormula()
Worksheets("Sheet1").Range("A1:B3").Formula = "=RAND()"
End Sub
示例
本示例使用工作表函数 Pmt 来计算住宅抵押贷款的支付额。请注意,本示例使用的是 InputBox 方法,而不是 InputBox 函数,因此该方法可以执行类型检查。Static 语句使 Visual Basic 保留三个变量的值;当下次运行该程序时,这些变量将显示为默认值。

Static loanAmt
Static loanInt
Static loanTerm
loanAmt = Application.InputBox _
(Prompt:="Loan amount (100,000 for example)", _
Default:=loanAmt, Type:=1)
loanInt = Application.InputBox _
(Prompt:="Annual interest rate (8.75 for example)", _
Default:=loanInt, Type:=1)
loanTerm = Application.InputBox _
(Prompt:="Term in years (30 for example)", _
Default:=loanTerm, Type:=1)
payment = Application.WorksheetFunction _
.Pmt(loanInt / 1200, loanTerm * 12, loanAmt)
MsgBox "Monthly payment is " & Format(payment, "Currency")

可用于 Visual Basic 的工作表函数列表

A_______________________________
Acos
Acosh
And
Asin
Asinh
Atan2
Atanh
AveDev
Average
B_______________________________
BetaDist
BetaInv
BinomDist
C_______________________________
Ceiling
ChiDist
ChiInv
ChiTest
Choose
Clean
Combin
Confidence
Correl
Cosh
Count
CountA
CountBlank
CountIf
Covar
CritBinom
D_______________________________
DAverage
Days360
Db
DCount
DCountA
Ddb
Degrees
DevSq
DGet
DMax
DMin
Dollar
DProduct
DStDev
DStDevP
DSum
DVar
DVarP
E_______________________________
Even
ExponDist
F_______________________________
Fact
FDist
Find
FindB
FInv
Fisher
FisherInv
Fixed
Floor
Forecast
Frequency
FTest
Fv
G_______________________________
GammaDist
GammaInv
GammaLn
GeoMean
Growth
H_______________________________
HarMean
HLookup
HypGeomDist
I_______________________________
<Index
Intercept
Ipmt
Irr
IsErr
IsError
IsLogical
IsNA
IsNonText
IsNumber
Ispmt
IsText
J_______________________________
K_______________________________
Kurt
L_______________________________
Large
LinEst
Ln
Log
Log10
LogEst
LogInv
LogNormDist
Lookup
M_______________________________
Match
Max
MDeterm
Median
Min
MInverse
MIrr
MMult
Mode
N_______________________________
NegBinomDist
NormDist
NormInv
NormSDist
NormSInv
NPer
Npv
O_______________________________
Odd
Or
P_______________________________
Pearson
Percentile
PercentRank
Permut
Phonetic
Pi
Pmt
Poisson
Power
Ppmt
Prob
Product
Proper
Pv
Q_______________________________
Quartile
R_______________________________
Radians
Rank
Rate
Replace
ReplaceB
Rept
Roman
Round
RoundDown
RoundUp
RSq
RTD
S_______________________________
Search
SearchB
Sinh
Skew
Sln
Slope
Small
Standardize
StDev
StDevP
StEyx
Substitute
Subtotal
Sum
SumIf
SumProduct
SumSq
SumX2MY2
SumX2PY2
SumXMY2
Syd
T_______________________________
Tanh
TDist
Text
TInv
Transpose
Trend
Trim
TrimMean
TTest
U_______________________________
USDollar
V_______________________________
Var
VarP
Vdb
VLookup
W_______________________________
Weekday
Weibull
X_______________________________
Y_______________________________
Z_______________________________
ZTest

另外你说的第三个问题,我没有遇到过。不过我想你可能是注册方法不对吧。
你应该保证你的Comdlg32.ocx在正确的目录下。win95/98/me,就拷贝Comdlg32.ocx到windows/system目录中即可;win2000/xp,就拷贝Comdlg32.ocx到windows/system32目录中即可。

第一个问题转置粘贴即可
第二的问题楼上回答是错误的。当然直接用excel函数通常情况下是不可以的,不过我们可以曲线救国,excel中表格可以用的函数,在VBA中也可以用,只需通过WorksheetFunction对象就可以引用,后面加函数名称,然后加range来引用单元格。举个例子:
Application.WorksheetFunction.Max(range("A1:C5"))
下面就是如何在VBA中使用excel自带函数的文章。说简单其实很简单,根据我的经历,仔细阅读一下非常非常有好处,以后能省大力气,因为这个绝对会经常用到。如果嫌罗嗦,直接看看例子就明白怎么用了。但强烈建议你收藏起来以后阅读。

Visual
Basic
语句中可以使用大多数
Microsoft
Excel
工作表函数。若要查看可以使用的工作表函数列表,请参阅
Visual
Basic
可使用的工作表函数列表。
注意
一些工作表函数在
Visual
Basic
中是不实用的。例如:Concatenate
函数就不实用,因为在
Visual
Basic
中可使用
&
运算符来连接多个文本值。

Visual
Basic
中调用工作表函数

Visual
Basic
中,通过
WorksheetFunction
对象可使用
Microsoft
Excel
工作表函数。
以下
Sub
过程使用
Min
工作表函数来决定在某个单元格区域中的最小值。首先,将变量
myRange
声明为
Range
对象,然后将其设置为
Sheet1
上的
A1:C10
单元格区域。指定另一个变量
answer
为对
myRange
应用
Min
函数的结果。最后,answer
的值就被显示在消息框中。
Sub
UseFunction()
Dim
myRange
As
Range
Set
myRange
=
Worksheets("Sheet1").Range("A1:C10")
answer
=
Application.WorksheetFunction.Min(myRange)
MsgBox
answer
End
Sub
如果您使用的工作表函数需要一个单元格区域引用作为参数,则必须指定一个
Range
对象。例如:您可以用
Match
工作表函数搜索单元格区域。可以在工作表单元格中输入公式,如“=MATCH(9,A1:A10,0)”。但是,您应在
Visual
Basic
过程中指定一个
Range
对象来获取相同的结果。
Sub
FindFirst()
myVar
=
Application.WorksheetFunction
_
.Match(9,
Worksheets(1).Range("A1:A10"),
0)
MsgBox
myVar
End
Sub
注意
Visual
Basic
函数不使用
WorksheetFunction
识别符。函数可能和
Microsoft
Excel
的函数同名但作用各异。例如:Application.WorksheetFunction.Log

Log
将返回不同的值。
在单元格中插入工作表函数
若要在单元格中插入工作表函数,请指定函数作为相应的
Range
对象的
Formula
属性值。以下示例中,将
RAND
工作表函数(可生成随机数)赋给了活动工作簿中
Sheet1

A1:B3
单元格区域的
Formula
属性。
Sub
InsertFormula()
Worksheets("Sheet1").Range("A1:B3").Formula
=
"=RAND()"
End
Sub
示例
本示例使用工作表函数
Pmt
来计算住宅抵押贷款的支付额。请注意,本示例使用的是
InputBox
方法,而不是
InputBox
函数,因此该方法可以执行类型检查。Static
语句使
Visual
Basic
保留三个变量的值;当下次运行该程序时,这些变量将显示为默认值。
Static
loanAmt
Static
loanInt
Static
loanTerm
loanAmt
=
Application.InputBox
_
(Prompt:="Loan
amount
(100,000
for
example)",
_
Default:=loanAmt,
Type:=1)
loanInt
=
Application.InputBox
_
(Prompt:="Annual
interest
rate
(8.75
for
example)",
_
Default:=loanInt,
Type:=1)
loanTerm
=
Application.InputBox
_
(Prompt:="Term
in
years
(30
for
example)",
_
Default:=loanTerm,
Type:=1)
payment
=
Application.WorksheetFunction
_
.Pmt(loanInt
/
1200,
loanTerm
*
12,
loanAmt)
MsgBox
"Monthly
payment
is
"
&
Format(payment,
"Currency")
可用于
Visual
Basic
的工作表函数列表
A_______________________________
Acos
Acosh
And
Asin
Asinh
Atan2
Atanh
AveDev
Average
B_______________________________
BetaDist
BetaInv
BinomDist
C_______________________________
Ceiling
ChiDist
ChiInv
ChiTest
Choose
Clean
Combin
Confidence
Correl
Cosh
Count
CountA
CountBlank
CountIf
Covar
CritBinom
D_______________________________
DAverage
Days360
Db
DCount
DCountA
Ddb
Degrees
DevSq
DGet
DMax
DMin
Dollar
DProduct
DStDev
DStDevP
DSum
DVar
DVarP
E_______________________________
Even
ExponDist
F_______________________________
Fact
FDist
Find
FindB
FInv
Fisher
FisherInv
Fixed
Floor
Forecast
Frequency
FTest
Fv
G_______________________________
GammaDist
GammaInv
GammaLn
GeoMean
Growth
H_______________________________
HarMean
HLookup
HypGeomDist
I_______________________________
<Index
Intercept
Ipmt
Irr
IsErr
IsError
IsLogical
IsNA
IsNonText
IsNumber
Ispmt
IsText
J_______________________________
K_______________________________
Kurt
L_______________________________
Large
LinEst
Ln
Log
Log10
LogEst
LogInv
LogNormDist
Lookup
M_______________________________
Match
Max
MDeterm
Median
Min
MInverse
MIrr
MMult
Mode
N_______________________________
NegBinomDist
NormDist
NormInv
NormSDist
NormSInv
NPer
Npv
O_______________________________
Odd
Or
P_______________________________
Pearson
Percentile
PercentRank
Permut
Phonetic
Pi
Pmt
Poisson
Power
Ppmt
Prob
Product
Proper
Pv
Q_______________________________
Quartile
R_______________________________
Radians
Rank
Rate
Replace
ReplaceB
Rept
Roman
Round
RoundDown
RoundUp
RSq
RTD
S_______________________________
Search
SearchB
Sinh
Skew
Sln
Slope
Small
Standardize
StDev
StDevP
StEyx
Substitute
Subtotal
Sum
SumIf
SumProduct
SumSq
SumX2MY2
SumX2PY2
SumXMY2
Syd
T_______________________________
Tanh
TDist
Text
TInv
Transpose
Trend
Trim
TrimMean
TTest
U_______________________________
USDollar
V_______________________________
Var
VarP
Vdb
VLookup
W_______________________________
Weekday
Weibull
X_______________________________
Y_______________________________
Z_______________________________
ZTest
另外你说的第三个问题,我没有遇到过。不过我想你可能是注册方法不对吧。
你应该保证你的Comdlg32.ocx在正确的目录下。win95/98/me,就拷贝Comdlg32.ocx到windows/system目录中即可;win2000/xp,就拷贝Comdlg32.ocx到windows/system32目录中即可。

1、在excel工作表中如何把一个表格旋转90度,让原先的行成为列,列成为行
答:不用vba就行啊!非用vba吗?选择你要旋转的表格复制,点你要放置的地方,右键,选择性粘贴,点选转置就可以了啊!
2、excel有丰富强大的函数,而VBA则相对较少,能否在VBA中引用excel的函数。如何引用?
答:我个人认为不行,但我能运用excel解决的问题在运用vba时候没有几个解决不了的,你可以两个相互搭配起来用,该引用的地方引用,该联系的时候联系,我就是这样做的,好像都可以解决了.呵呵
3、这个问题没有碰到过,要我就重新换个版本的excel重装,我建议你也如是做。

关于EXCEL VBA的问题,选择一个单元格,有对话框提示另外一个单元格的内容,谢谢~

这个刚好前一阵有用过
就是在这个工作表的模块的SelectionChange里面添加代码
基本上是
If Selection.Column = 2 And Selection.Row > 1 And Selection.Count = 1 Then MsgBox Selection.Offset(0, 1)ElseEnd If

如果用宏就不要用这个功能了。直接替换掉,或者直接写在筛选代码里面,1722187970.

关于excel vba的问题,请大家把代码直接告诉我
答:方法很多,最简单的是DOS命令。dir *.xls* 就能知道有多少个Excel文件 dir *.xls* > 1.bat 把得到的Excel文件列表保存在一个批处理文件中 执行1.bat 就能依次打开所有文档 窗口切换,最简的就是VBS了。WSH.AppActivate ("A") 这句能激活A文档窗口,B亦然 === 补充回答:你的思路乱啊,怎么...

关于Excel VBA 隐藏行或列的问题
答:第一个问题是target后面不能跟row,target直接就代表当前单元格:将function函数放在模块中,执行正常:

关于VBA在EXCEL中的应用,求一实例
答:For i = 1 To Sheet8.Range("a65536").End(xlUp).Row '运算从Sheet8的第一行到第一列的最后一个有内容的单元格所在列.'对后面内容,你可以查找END()的帮助来理解 Sheet3.Cells(i, 1).Formula = "=MATCH(Sheet8!A" & i & ",Sheet1!A:A,0)"'本句为了节省代码,直接借用了EXCEL的...

关于excel VBA
答:乱七八糟。你擅长于把简单的东东复杂化吧。。直接把要求说清楚吧。。是这样吗?如果A1的内容为<c i="HS765" v="Cardinal Health, Inc." />,就把A1改为HS765,在B1填上Cardinal Health, Inc.吗?就按我上面说的套路把问题说清楚吧。。是HS765的就在第二列输出v的值吗?不是HS765的就...

关于excel vba编程的问题,有没有高手在啊。
答:If Cells(l - 1, 1) <> "" Then '当cells(l,1)=空 ,l-1 为空的单元格上边非空单元格的个数 Range(Cells(k, 1), Cells(l - 1, 1)).Select Cells(l - 1, 2) = WorksheetFunction.Sum(Selection)Cells(l - 1, 3) = Selection.Count End If k = l + 1 l = l + 1 L...

怎样用VBA在excel中添加一个工作表并且对其命名
答:用VBA在excel中添加一个工作表并且对其命名的实现方法和操作步骤如下:1、首先,在Excel中按快捷键“Alt + F11”,如下图所示。2、其次,在VBA编辑器中依次单击“插入”-->“模块”,如下图所示。3、然后,在“模块”中输入如下代码:Option Explicit Sub addwork()Sheets.Add after:=Sheets(...

关于excel vba的问题
答:答:抱歉,我开始误解了你的意思,现在更改了代码,它的功能是获取选取区域与A列组合的区域,同样适合选择区域本身包含A列的情况。Sub GetRng() Dim r As Range Dim t As Range Dim ComRng As Range '最终取得的区域 If Not Intersect(Selection, Range("A:A")) Is Nothing Then ...

一个Excel VBA的问题
答:Data)。如果工作簿1打开或者跟引用工作簿处于同一个目录下则可以省略路径,否则您还需要补全路径。❤VBA 引用方法如 莱昂纳德_欧拉 所写:Workbooks("a.xls").Sheets("Sheet1").Cells(1, 1).Value 但是这样不能指定工作簿路径。您可以在VBA中使用数组公式,并在其中指定工作簿路径。

excel谁会写个VBA?
答:当然,我可以帮您编写VBA程序。请告诉我您需要编写什么类型的程序,以便我可以更好地帮助您。以下是一个简单的VBA程序示例,用于在Excel工作表中自动填充连续的数字:vba复制代码 Sub AutoFill()Dim startCell As Range Dim endCell As Range Dim i As Integer Set startCell = Range("A1") '设置...

关于excel的一个问题,可能要用到VBA,所有积分都给您!
答:亲,首先将你的统计文件和所有人的总结文件放在同一个文件夹中。打开你的Excel统计文件,按“Alt+F11”打开VBA编辑窗口,然后在左侧对应的Sheet上双击,右侧空白处粘贴下面的代码。关闭VBA窗口。然后按“Alt+F8”打开宏窗口,选择刚插入的宏,点击“执行”。Sub jcl()Dim f, ff As ObjectSet fso = ...