值为 函数的字符串 转为 表达式计算,VFP中可用宏替换,EXCEL VBA中如何实现
最近拷贝了一个色值表到EXCEL表,两列数据,A列是 颜色名称,B列是 十六进制色值,共 144 行数据,由于经常用到 RGB值,为便于参考,
1、我打算增加相应的 RGB值 到 C 列
—— 即根据 B 列的 十六进制色值 转为十进制 RGB 如 #8470FF 到 RGB(132,112,255),生成在 C 列
2、为更直观,同时增加相应的色块到 D 列
—— 根据 RGB值 填充 D 列 单元格背景色
本来打算直接在 EXCEL VBA中完成的,因为 EXCEL 本身具有转换函数 HEX2DEC ,但解决第 2点时,碰到问题,
如何通过 C列 的字符串 “RGB( r,g,b)”如 "RGB(132,112,255)"转化为 RGB(132,112,255) ,然后赋给 interior.color=RGB(132,112,255)
这在VFP中用宏替换容易解决,但在VBA中如何做到呢,上网找了下,好象要用到 微软的脚本控件 Script.control,难道真要这么费劲吗
我试了下,不成功,最后还是用 VFP 结合 EXCEL 来完成。
程序代码:
#define xlFillDefault 0
#define xlPasteFormats -4122
#define xlNone -4142
LOCAL oExcel as 'Excel.application'
LOCAL nDataRows as Integer
LOCAL cRange,lcStr as String
oExcel=Createobject('Excel.application')
oExcel.Workbooks.Open('F:\常用RGB色值表.xlsx')
oExcel.Worksheets("sheet1").Activate
oExcel.Visible=.T.
*oExcel.cells.Hyperlinks.Delete
oExcel.Range("C1").Select
oExcel.ActiveCell.value = "RGB值"
oExcel.Range("C2").Select
oExcel.ActiveCell.FormulaR1C1 = ;
'=HEX2DEC(MID(RC[-1],2,2))&","&HEX2DEC(MID(RC[-1],4,2))&","&HEX2DEC(MID(RC[-1],6,2))'
nDataRows=oExcel.SHEETS(1).UsedRange.Rows.Count
cRange=["C2:C]+TRANSFORM(nDataRows)+["]
oDestination=oExcel.Range(&cRange)
nType=xlFillDefault
oExcel.Selection.AutoFill(oDestination, nType)
oExcel.Range(&cRange).select
*!*生成色块列
oExcel.Cells(1,4).value = "色块"
FOR r=2 TO nDataRows
lcStr='RGB('+oExcel.cells(r,3).value+')'
oExcel.cells(r,4).interior.color=&lcStr &&
NEXT
oExcel.Range("B1").select
oExcel.Selection.Copy
oExcel.Range("D1").Select
oExcel.Selection.PasteSpecial(xlPasteFormats,xlNone, .F., .F.)
&&格式化标题
*!*最后格式化 RGB值数据列
cRange=["B1:B]+TRANSFORM(nDataRows+1)+["]
oExcel.Range(&cRange).select
oExcel.Selection.Copy
oExcel.Range("C1").Select
oExcel.Selection.PasteSpecial(xlPasteFormats,xlNone, .F., .F.)
oExcel.columns("C").autofit
oExcel.Application.CutCopyMode=.f.
我的问题是:VFP的宏替换功能, VBA中如何实现?
附转换后的数据表:
[ 本帖最后由 wasun2012 于 2013-2-5 11:54 编辑 ]








